package cn.itcast.web_07.session.example01;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class PurcharseServlet
 */
public class PurcharseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PurcharseServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    // 处理响应中文的乱码
        response.setContentType("text/html;charset=utf-8");
        // 1、获取图书信息
        String id = request.getParameter("id");
        // 判断id是否存在
        if (id == null) {
            //表示没有购买图书
            response.sendRedirect("/web_07/list");
            return;
        }
        // 2、图书已经购买，获取图书
        Book book = BookDB.getBook(id);
        // 3、把图书添加到购物车
        HttpSession session = request.getSession();
        List<Book> list = (List<Book>) session.getAttribute("cart");
        // 4、判断购物车是否存在，是不是首次购买图书
        if (list == null) {
            list = new ArrayList<Book>();
            session.setAttribute("cart", list);
        }
        // 5、把图书添加到购物车
        list.add(book);
        // 6、把请求跳转CartServlet回显图书
        /*
        用session存储购物车图书，用一个cookie(键为"JESSIONID"，值为session的id)，
        把这个cookie加到response中，这个带着购物车session的id的cookie就跟着响应给浏览器了，
        在后续的请求中将会话ID发送给服务器，从而实现会话跟踪
         */
        Cookie cookie = new Cookie("JESSIONDI", session.getId());
        cookie.setMaxAge(60*60*24);
        /*
        限制了只在"/web_07"路径下浏览器会发送这个 Cookie 给服务器。
        这在一些情况下是很有用的，比如你希望某些 Cookie 只在特定的路径下有效，而不是在整个网站范围内都有效。
        这样可以提高安全性和控制 Cookie 的传输范围
        */
        cookie.setPath("/web_07");
        response.addCookie(cookie);
        // 请求重定向到cartServlet里面
        response.sendRedirect("/web_07/cart");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
